Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Rendered • View rawDownload


docs/agents/skills/rrc-relay-chat/SKILL.md 8db1f550262ba40ef35b4f081dfd893e78dc1658 (8db1f550) Text, 3.06 KB

Skill: rrc-relay-chat

Implement or harden Reticulum Relay Chat (RRC) hubs and clients without breaking membership, +k keys, or identity scoping.

When to use

• Relay Chat UI, HTTP/WS APIs, hub hosting, moderation commands
• Room keys (+k), invite-only (+i), kick/ban/part behaviour
• Client history, auto-rejoin, stored room keys
• Spec alignment with https://rrc.kc1awv.net/ (hub conventions such as +k are rrcd-compatible extensions)

Core model

• Aspect: T383838rrc.hub. Address hubs by destination hash, not IP.
• Hub-and-spoke over RNS Links. Rooms are hub-local labels.
• JOIN body is empty in core wire docs. MeshChatX hubs may put a room key string in the JOIN body for +k.
• Local HTTPS UI is not the mesh. Peers are not REST clients of MeshChatX.

Key paths

┌───────────────────┬─────────────────────────────────────────────────┐
│ Area │ Path │
├───────────────────┼─────────────────────────────────────────────────┤
│ Protocol │ T383838meshchatx/src/backend/rrc/protocol.py
│ Client hubs │ T383838meshchatx/src/backend/rrc/manager.py
│ Hosted hub │ T383838meshchatx/src/backend/rrc/server.py
│ Commands │ T383838meshchatx/src/backend/rrc/hub_commands.py
│ Room ACL │ T383838meshchatx/src/backend/rrc/room_registry.py
│ rooms.toml │ T383838meshchatx/src/backend/rrc/rooms_toml.py
│ Client key crypto │ T383838meshchatx/src/backend/rrc/room_key_crypto.py
│ Key DAO │ T383838meshchatx/src/backend/database/rrc_room_keys.py
│ UI │ T383838meshchatx/src/frontend/components/relay/
└───────────────────┴─────────────────────────────────────────────────┘

Non-negotiables

1. Do not promote founder/ops before +k / +i checks pass.
2. Non-member PART must not fan out PARTED.
3. Kick/ban must fan PARTED to remaining members and force client leave on ERROR.
4. Client room keys: AES-GCM wrapped with HKDF from identity private key. Never return plaintext keys from list APIs.
5. Hub room keys may live in rooms.toml (hub-local). Public API exposes T383838has_key only.
6. Quote rooms.toml table names so dotted room names roundtrip.
7. Identity-scoped state only. Removing a hub clears stored keys for that hub.

Modes (hub conventions)

┌──────┬──────────────────────────────────────────────┐
│ Flag │ Meaning │
├──────┼──────────────────────────────────────────────┤
│ +k │ Key required to JOIN (unless op or invited) │
│ +i │ Invite-only │
│ +n │ No outside messages (non-members cannot MSG) │
│ +m │ Moderated (need voice) │
│ +p │ Private (hide from list / who restrictions) │
│ +t │ Topic ops-only │
└──────┴──────────────────────────────────────────────┘

Without +n, non-members can MSG an existing room (IRC-like). Kick removes membership. Enable +n if kicked users must stay silent.

Tests

T282828
uv run pytest tests/backend/test_rrc_oracle_bugs.py tests/backend/test_rrc_room_keys.py tests/backend/test_rrc_server.py tests/backend/test_rrc_moderation.py -q --tbTff7b72=short
pnpm Tffa657exec vitest run tests/frontend/RelayChatPage.test.js


Use oracle and exploratory skills when hunting RRC bugs.


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────